package com.wangshouyu.mp.micro.qrcode;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;

import java.io.Serializable;
import java.util.Objects;

/**
 * @author 王守钰
 * @description 小程序码
 * @date 2020/8/21 下午10:28
 */
public class QrCode implements Serializable {

    /**
     * 最大32个可见字符，
     * 只支持数字，大小写英文以及部分特殊字符：!#$&'()*+,/:;=?@-._~，
     * 其它字符请自行编码为合法字符（因不支持%，中文无法使用 urlencode 处理，请使用其他编码方式）
     */
    private String scene;

    /**
     * 必须是已经发布的小程序存在的页面（否则报错）
     * ，例如 pages/index/index,
     * 根路径前不要填加 /,
     * 不能携带参数（参数请放在scene字段里），
     * 如果不填写这个字段，默认跳主页面
     */
    private String page;

    /**
     * 二维码的宽度，单位 px，
     * 最小 280px，最大 1280px
     */
    private Integer width;

    /**
     * 自动配置线条颜色，
     * 如果颜色依然是黑色，则说明不建议配置主色调，
     * 默认 false
     */
    @SerializedName(value = "auto_color")
    @JsonProperty(value = "auto_color")
    @JSONField(name = "auto_color")
    private Boolean autoColor;

    /**
     * auto_color 为 false 时生效，
     * 使用 rgb 设置颜色
     */
    @SerializedName(value = "line_color")
    @JsonProperty(value = "line_color")
    @JSONField(name = "line_color")
    private Rgb lineColor;

    /**
     * 是否需要透明底色，
     * 为 true 时，生成透明底色的小程序
     */
    @SerializedName(value = "is_hyaline")
    @JsonProperty(value = "is_hyaline")
    @JSONField(name = "is_hyaline")
    private Boolean isHyaline;

    public String getScene() {
        return scene;
    }

    public void setScene(String scene) {
        this.scene = scene;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public Integer getWidth() {
        return width;
    }

    public void setWidth(Integer width) {
        this.width = width;
    }

    public Boolean getAutoColor() {
        return autoColor;
    }

    public void setAutoColor(Boolean autoColor) {
        this.autoColor = autoColor;
    }

    public Rgb getLineColor() {
        return lineColor;
    }

    public void setLineColor(Rgb lineColor) {
        this.lineColor = lineColor;
    }

    public Boolean getHyaline() {
        return isHyaline;
    }

    public void setHyaline(Boolean hyaline) {
        isHyaline = hyaline;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        QrCode qrCode = (QrCode) o;
        return Objects.equals(scene, qrCode.scene) && Objects.equals(page, qrCode.page) && Objects.equals(width, qrCode.width) && Objects.equals(autoColor, qrCode.autoColor) && Objects.equals(lineColor, qrCode.lineColor) && Objects.equals(isHyaline, qrCode.isHyaline);
    }

    @Override
    public int hashCode() {
        return Objects.hash(scene, page, width, autoColor, lineColor, isHyaline);
    }

    @Override
    public String toString() {
        return "QrCode{" +
                "scene='" + scene + '\'' +
                ", page='" + page + '\'' +
                ", width=" + width +
                ", autoColor=" + autoColor +
                ", lineColor=" + lineColor +
                ", isHyaline=" + isHyaline +
                '}';
    }
}
